Promise와 async/await의 이해
작성일 : 2024.11.24
Promise의 개념에 대해 설명해주세요
Promise는 비동기 연산의 상태를 나타내는 객체입니다. 비동기 처리가 진행중이면 pending, 성공이면 fulfilled, 실패면 rejected라는 상태값을 가집니다. Promise는 비동기 프로그램을 then과 catch의 체이닝을 통해, 보다 간결하게 표현할 수 있도록 ES6에서 새로 도입되었습니다.
Promise 등장 이전에는 어떤 방식으로 비동기 처리를 했는지 설명
Promise 등장 이전에는 비동기 작업을 처리하는 함수에 성공 콜백과, 실패 콜백을 각각 넘겨서 완료 상태에 따른 처리를 했습니다. 이런 방식이다 보니, 두개 이상의 비동기 작업이 순서를 갖고 실행되어야 할 때, 콜백 함수 안에 또다른 콜백 함수가 점점 중첩되는 callback hell 현상이 발생하여, 코드 가독성 및 유지보수성 저하의 요인이 되곤 했습니다.
async-await에 대해 설명해주세요.
Promise의 완료를 기다리기 위한 문법으로, async 키워드로 정의한 함수 내에서 호출되는 Promise 앞에 await 키워드를 쓰면, 해당 Promise가 완료될 때까지 코드의 실행을 일시 중단할 수 있습니다. 이를 통해 비동기 코드를 마치 동기 코드처럼 쉽게 작성할 수 있습니다.
async-await를 사용할 때 주의해야할 점
await의 에러 핸들링은 반드시 try-catch 블록에서 해야합니다. 또한 await는 Promise가 완료될 때까지 함수의 실행을 중단하기 때문에, 실행흐름을 잘 고려하여 적재적소에 써야합니다. 예를 들어, 여러 비동기 작업이 순차적으로 진행될 필요가 없는 경우, await 대신 Promise.all 함수를 사용하는 것이 바람직합니다.